package com.teichmann.bo;

import java.io.Serializable;
import java.sql.Date;
import java.util.ArrayList;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;

@Entity
@NamedQueries( {
		@NamedQuery(name = "Car.findByModelo", query = "SELECT car FROM Car car WHERE car.modelo like :modelo"),
		@NamedQuery(name = "Car.findByAno", query = "SELECT car FROM Car car WHERE car.anoFabricacao between ?1 and ?2"),
		@NamedQuery(name = "Car.findByURL", query = "SELECT car FROM Car car WHERE car.url = ?1 ") })
public class Car implements Serializable {
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private int id;
	private String placa;
	private String montadora;
	private String modelo;
	
	//for full text search
	private Set<String> fts;
	
	private int anoFabricacao;
	private int anoModelo;
	private String cor;
	private int km;
	private String combustivel;
	private String descricao;
	private String valor;

	private Date dataCriacao = new Date(System.currentTimeMillis());
	private Date dataAtualizacao;

	@ManyToOne(cascade=CascadeType.ALL)
	private Seller revenda;

	// extra information
	private String site;
	private String url;
	private ArrayList<String> fotos;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public int getAnoFabricacao() {
		return anoFabricacao;
	}

	public void setAnoFabricacao(int anoFabricacao) {
		this.anoFabricacao = anoFabricacao;
	}

	public int getAnoModelo() {
		return anoModelo;
	}

	public void setAnoModelo(int anoModelo) {
		this.anoModelo = anoModelo;
	}

	public int getKm() {
		return km;
	}

	public void setKm(int km) {
		this.km = km;
	}

	public String getPlaca() {
		return placa;
	}

	public void setPlaca(String placa) {
		this.placa = placa;
	}

	public String getModelo() {
		return modelo;
	}

	public void setModelo(String modelo) {
		this.modelo = modelo;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public String getSite() {
		return site;
	}

	public void setSite(String site) {
		this.site = site;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public ArrayList<String> getFotos() {
		return fotos;
	}

	public void setFotos(ArrayList<String> fotos) {
		this.fotos = fotos;
	}

	public String getMontadora() {
		return montadora;
	}

	public void setMontadora(String montadora) {
		this.montadora = montadora;
	}

	public String getValor() {
		return valor;
	}

	public void setValor(String valor) {
		this.valor = valor;
	}

	public String getCor() {
		return cor;
	}

	public void setCor(String cor) {
		this.cor = cor;
	}

	public String getCombustivel() {
		return combustivel;
	}

	public void setCombustivel(String combustivel) {
		this.combustivel = combustivel;
	}

	public Date getDataCriacao() {
		return dataCriacao;
	}

	public void setDataCriacao(Date dataCriacao) {
		this.dataCriacao = dataCriacao;
	}

	public Date getDataAtualizacao() {
		return dataAtualizacao;
	}

	public void setDataAtualizacao(Date dataAtualizacao) {
		this.dataAtualizacao = dataAtualizacao;
	}

	public Seller getRevenda() {
		return revenda;
	}

	public void setRevenda(Seller revenda) {
		this.revenda = revenda;
	}

	@Override
	public String toString() {
		StringBuilder buString = new StringBuilder();
		
		buString.append(" montadora " + montadora == null ? "" : montadora);
		buString.append(" modelo : " + (modelo == null ? "" : modelo));
		buString.append(" placa  : " + (placa == null ? "" : placa) );
		buString.append(" ano f  : " + (anoFabricacao == 0 ? "" : anoFabricacao));
		buString.append(" ano m  : " + (anoModelo == 0 ? "" : anoModelo));
		buString.append(" cor 	 : " 	+ (cor == null ? "" : cor));
		buString.append(" combustivel  : " + (combustivel == null ? "" : combustivel));
		buString.append(" valor  : " + (valor == null ? "" : valor));
		
		return buString.toString();
	}

	public Set<String> getFts() {
		return fts;
	}

	public void setFts(Set<String> fts) {
		this.fts = fts;
	}

}
